RDSのSQL Server 2008で日本語のデータを登録する方法
最近はAWSの環境構築周りで奮闘中のうえじゅんですw
先日、RDS上のSQL Serverに他のDBからデータをインポートする際に日本語が文字化けてしまう問題が発生しました。
苦労しながら解決したので、ブログに残したいと思います。
RDSにSQL Serverのセットアップ
まずは、RDSにSQL Serverのセットアップ方法から簡単に書きたいと思います。
- Lunch DB Instance を選択し、Microsoft SQL Server Express Edition を指定します。
(4種類ありますが、任意のものを選んでください) - DB Engine Version は SQL Server 2008 を指定します。
普段は意識する必要はありませんが、SQL Server は後からIOPSを指定することができません。
Snapshots からの復元でも指定出来ませんでした。
そのため、増やす必要がある場合は必ず最初に指定してください。 - あとは特に指定すべきものは無いので、そのまま完了まで進めます。
起動まではかなりの時間がかかるので、放置しておきましょうw
SQL Serverの検証
RDSにセットアップが完了したので、日本語を利用できるかの検証を行いたいと思います。
さっそくテーブルを作成します。
こちらは日本語で文字化けが発生するテーブルを作成しています。
次に文字化けが発生しないテーブルを作成します。
ポイントはオプションで Japanese_XJIS_100_BIN を指定することです。
RDSではデフォルトでは参照順序が SQL_Latin1_General_CP1_CI_AS となっているので日本語に対応していないのです。
参照順序については、以下のURLを参照してください。
http://msdn.microsoft.com/ja-jp/library/ms143515(v=sql.105).aspx
これで2つのデータベースを作成しました。
以下のような感じになるかと思います。
では、各データベースにテーブルを作成します。
両方に同じ内容を追加すると以下のようになるかと思います。
作成したテーブルにデータを追加します。
テスト文字化け
テスト日本語OK
では、データを確認してみましょう。
参照順序をデフォルトのままにしたデータベースでは結果が「???」と文字化けしてしまっています。
参照順序を指定したものはこのようにちゃんと日本語が表示されていますね。
知っていれば全く問題ありませんが、知らないと痛い目に合うのでそう言えば何か設定があったなと覚えておきましょう。
まとめ
なぜこのようなことが起こってしまうかといいますと、以下のような仕様があるようです。
SQL Server 2008 照合順序の設定は、インストールの種類によって異なります。通常は、組織で共通に使用されている Windows システム ロケールをサポートする SQL Server 照合順序を選択します。
http://msdn.microsoft.com/ja-jp/library/ms144260(v=sql.105).aspx
RDSでは、インストールされているWindowsのシステム ロケールを指定及び変更ができないため、デフォルトが英語圏になってしまいます。
また、権限も管理者権限を持っていないため、後から変更もできません。
便利な機能の「データベースの復元」機能も使えないため、データのエクスポート、インポートを利用する形となります。
RDSのSQL Serverは制限事項もあり、EC2で自分で環境構築するよりは不便な点はありますが、
Snapshotsを取って簡単に復元をすることができたり、1日単位で自動バックアップされたりRDSとしての便利さはあります。
既存のオンプレミス環境がWindows系を利用しているとしても、
AWS上に同様の環境を用意できますし、AWSならではの便利機能も使えますので移行を検討されている方も安心してください。